#include "interface.h"

/* 函数功能：弹出一个新界面
 * 入口参数：GladeXML **window
 *         界面对应的窗口
 *         char *str
 *         新界面对应的glade窗口名称
 *         guint treeType
 *         0，无树；1，有树
 * 出口参数：无
 * 返 回 值 ：int
 *         SUCCESS  函数成功执行
 *         FAILURE  函数执行出错
 * 创建日期：2009年7月8号
 * 创 建 人 ：匡波 马小艳
 * 更新历史：暂无
 */
int call(GladeXML **window, int argc, char **argv, char *str, guint treeType)
{
    gtk_init(&argc, &argv);

    *window = glade_xml_new(str, NULL, NULL);
    glade_xml_signal_autoconnect(*window);
 
    switch ( treeType )
    {
        case SERVER_LIST:
             treeView(*window, "SvConnectTree", SERVER_LIST);
             break;

        case SERVER_IMAGE_LIST:
             treeView(*window, "ImageGetTree", SERVER_IMAGE_LIST);
             break;
       
        default:
              break;
    }

#ifdef DEBUG
    printf("call window %x", *window);
#endif
    
    /* 设置弹出窗口为独占模式 */
    GtkWidget *win = NULL;
    win = glade_xml_get_widget(*window, "window1");
    gtk_window_set_modal (  GTK_WINDOW( win ), TRUE);  
   
    gtk_main();
  
    return SUCCESS;
}

/* 函数功能：弹出一个提示对话框
 * 入口参数：GtkButtonsType buttons
 *         对话框显示的按钮类型
 *         const gchar *message_format
 *         对话框显示的消息内容和格式
 * 出口参数：无
 * 返 回 值：gint
 *         result 被点击按钮的返回值
 * 创建日期：2009年7月8号
 * 创 建 人：匡波 马小艳
 * 更新历史：暂无
 */
gint showDialog(GtkWindow *parent,
                GtkDialogFlags flags,
	            GtkMessageType type,
                GtkButtonsType buttons,
                const gchar *message_format,
                ...)
{
   va_list arg_ptr;
   va_start(arg_ptr, message_format);

   GtkWidget *dialog = NULL;
   gint result = 0;
   
   dialog = gtk_message_dialog_new (parent,
                                    flags,
                                    type,
                                    buttons,
                                    message_format,
                                    arg_ptr );
   va_end(arg_ptr);

   result = gtk_dialog_run ( GTK_DIALOG (dialog) );

   gtk_widget_destroy (dialog);
   
   return result;
}

/* 函数功能：弹出一个提示对话框***************************************************
 * 入口参数：GtkButtonsType buttons
 *         对话框显示的按钮类型
 *         const gchar *message_format
 *         对话框显示的消息内容和格式
 * 出口参数：无
 * 返 回 值：gint
 *         result 被点击按钮的返回值
 * 创建日期：2009年7月8号
 * 创 建 人：匡波 马小艳
 * 更新历史：暂无
 */
gint addListColum(GtkTreeView * treeview, char* title, char * type, int index)
{
    GtkCellRenderer *renderer;
    GtkTreeViewColumn *column;
   
    /* 设置list列的属性：标题、类型 */
    renderer = gtk_cell_renderer_text_new ();
    column = gtk_tree_view_column_new_with_attributes (title,
						                               renderer,
						                               type,
                                                       index,
                                                       NULL);
    /* 设置列可拖动 */
    gtk_tree_view_column_set_resizable(column, TRUE);
   
    /* 将该列添加到listview中 */
    gtk_tree_view_append_column (treeview, column);

    return SUCCESS;
}

/* 函数功能：弹出一个提示对话框***************************************************
 * 入口参数：GtkButtonsType buttons
 *         对话框显示的按钮类型
 *         const gchar *message_format
 *         对话框显示的消息内容和格式
 * 出口参数：无
 * 返 回 值：gint
 *         result 被点击按钮的返回值
 * 创建日期：2009年7月8号
 * 创 建 人：匡波 马小艳
 * 更新历史：暂无
 */
gint addListRow(GtkWidget * treeview, GtkListStore **ListStore, guint Type)
{
   GtkTreeModel *model;

   switch ( Type )
   {
        case SERVER_LIST:
             *ListStore = gtk_list_store_new(NUM_COLS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
             break;

        case SERVER_IMAGE_LIST:
             *ListStore = gtk_list_store_new(NUM_COLS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
             break;
       
        default:
             break;

   }
   
   /* 设置listview模式 */
   model = GTK_TREE_MODEL( *ListStore );
   gtk_tree_view_set_model(GTK_TREE_VIEW(treeview), model);
   
   /* 将随主窗口销毁而释放内存 */
   g_object_unref (model);
   
   return SUCCESS;
}

/* 函数功能：创建一棵树
 * 入口参数：GladeXML *Window
 *         界面对应的窗口
 *         gchar *TreeView
 *         树的名字
 *         guint Type
 *         树对应的类型
 * 出口参数：无
 * 返 回 值：int
 *         SUCCESS  函数成功执行
 *         FAILURE  函数执行出错
 * 创建日期：2009年7月8号
 * 创 建 人：匡波 马小艳
 * 更新历史：暂无
 */
gint treeView(GladeXML *Window, gchar *TreeView, guint Type)
{

   GtkWidget * treeview = NULL;
   GtkTreeModel *model = NULL;
   GtkListStore *liststore = NULL;
   GtkTreeIter iter;
   gint i = 0;

  
   /* 获取窗口的treeview控件指针 */
   treeview = glade_xml_get_widget(Window, TreeView);
   
   if(treeview == NULL)
   {
    
      g_print("%s Line %d: Get widget error!, Treeview is null \n ", __FILE__, __LINE__);
 
      return FAILURE;

   }
  
   /* 获取treeview 模式 */
   model = gtk_tree_view_get_model ( GTK_TREE_VIEW(treeview ) );
   liststore = GTK_LIST_STORE( model );

   switch ( Type )
   {
        case SERVER_LIST:
        {
             gchar *Title[] = {"服务器名称         ", "IP 地址         ", "连接状态            "};

             /* 设置列表的列信息 */
             for(i = 0; i < NUM_COLS; i++)
  	             addListColum(GTK_TREE_VIEW( treeview ), Title[i], "text",  i);
  
             /* 设置列表的行信息 */
             addListRow(treeview, &liststore, Type);

             /* TODO 添加行 */ 
             /* 添加一行信息到listview中 */
             gchar *Row1[] = {"www.whukb.org", "202.114.70.88", "连接"};
   
             gtk_list_store_append(liststore, &iter);
  
             for(i = 0; i< NUM_COLS ; i++)
   	             gtk_list_store_set (liststore, 
		      	                     &iter,
   			                         i, 
                                     Row1[i],
  			                         -1 );
             }while(0);      
                  break;

        case SERVER_IMAGE_LIST:
        {
             gchar *Title[] = {"镜像名称           ", "镜像状态              ", "其他                "};
                   
             /* 设置列表的列信息 */
             for(i = 0; i < NUM_COLS; i++)
  	             addListColum(GTK_TREE_VIEW( treeview ), Title[i], "text",  i);
  
             /* 设置列表的行信息 */
             addListRow(treeview, &liststore, Type);

             /* TODO 添加行 */ 
             /* 添加一行信息到listview中 */
             gchar *Row1[] = {"Disk.img", "未下载", "Top Secret"};
   
             gtk_list_store_append(liststore, &iter);
  
             for(i = 0; i< NUM_COLS ; i++)
   	             gtk_list_store_set (liststore, 
		         	                 &iter,
   			                         i, 
                                     Row1[i],
  			                         -1 );
        }while(0);
             break;
       
        default:
              break;
   }
   
   return SUCCESS;
}
